package com.pattern.singleton.type2;

/**
 * @author 冯志立
 * @create 2019-10-17 11:30
 * 懒汉式
 */
public class SingletonTest02 {
}

//线程不安全  不能用
class Singleton {
    private static Singleton instance;

    private Singleton() {
    }

    ;

    //提供一个静态的公有方法，当使用到该方法时，才去创建instance
    //即懒汉式
    public static Singleton getInstance() {
        if (instance == null) {   //如果多线程，会产生多个实例
            instance = new Singleton();
        }
        return instance;
    }
}

//线程安全   效率太低
class Singleton2 {
    private static Singleton2 instance;

    private Singleton2() {
    }

    ;

    //提供一个静态的公有方法，加锁
    //即懒汉式
    public static synchronized Singleton2 getInstance() {
        if (instance == null) {   //如果多线程，会产生多个实例
            instance = new Singleton2();
        }
        return instance;
    }
}

//线程不安全  同步代码块  效率太低  不能用
class Singleton3 {
    private static Singleton3 instance;

    private Singleton3() {};

    //提供一个静态的公有方法，加锁
    //即懒汉式
    public static Singleton3 getInstance() {
        if (instance == null) {   //如果多线程，会产生多个实例
            synchronized (Singleton3.class) {   //这种同步不能起到线程同步的作用
                instance = new Singleton3();
            }
        }
        return instance;
    }
}


